python使用selenium爬取boos,100%爬取成功,绕过cookie 您所在的位置:网站首页 selenium 网址会变 python使用selenium爬取boos,100%爬取成功,绕过cookie

python使用selenium爬取boos,100%爬取成功,绕过cookie

2023-07-15 23:41| 来源: 网络整理| 查看: 265

        selenium也可用于爬虫,有时它比request库要强,这里我们就爬取boos招聘网站,爬过的同学就知道boos的反爬很难,如果不是大佬级别的人,很难攻克它的反爬机制,boos的cookie好像是每隔几分钟就失效,它一直在变,非常的烦,使用selenium能很好的绕过他的这个反爬机制。

这里可能有一些地方表达不是太清楚或者有误,还请多多包涵

首先安装selenium库

pip install selenium

查看自己电脑上的浏览器版本

谷歌浏览器:设置 -> 关于Chrome就可以看到谷歌浏览器的版本

 接下来就需要下载自己电脑上所对应的浏览器版本,下面是下载链接

谷歌

火狐

如果在下载过程中有什么疑问的可在留言区问我

把下载好的浏览器驱动放在py文件同级目录下

 1、导入所需要的模块

from selenium import webdriver from selenium.webdriver.common.keys import Keys import csv

2、打开浏览器

# 打开谷歌驱动 driver = webdriver.Chrome() # 打开火狐驱动, 下载的是哪个驱动就用所对应的驱动名打开,这里我使用的是谷歌 # driver = webdriver.Firefox() # 输入需要搜索的网址,这里直接输入boos的首页网址,也可以根据自己的需要来输入对应的网址,修改括号中的网址即可 driver.get("https://www.zhipin.com/")

 3、在输入框中输入想要搜索的内容

F12检查,用小箭头定位到输入框,查看input的class属性值

定位一个元素定位多个元素含义find_element_by_idfind_elements_by_id通过元素id定位find_element_by_namefind_elements_by_name通过元素name定位find_element_by_xpathfind_elements_by_xpath通过xpath表达式定位find_element_by_link_textfind_elements_by_link_tex通过完整超链接定位find_element_by_partial_link_textfind_elements_by_partial_link_text通过部分链接定位find_element_by_tag_namefind_elements_by_tag_name通过标签定位find_element_by_class_namefind_elements_by_class_name通过类名进行定位find_elements_by_css_selectorfind_elements_by_css_selector通过css选择器进行定位

 send_keys()是模拟键盘输入

find_element_by_css_selector()就是类似于把鼠标放到某处,这里是把鼠标放到输入框中。 # 输入搜索内容 driver.find_element_by_css_selector(".ipt-search").send_keys("python")

全自动,不需要自己输入

4、查看搜索内容

# # 模拟回车键 driver.find_element_by_css_selector(".ipt-search").send_keys(Keys.ENTER)

 

 这里需要设置 driver.implicitly_wait(10) 等待10秒, 否则会报错。

# implicitly_wait(): 隐式等待 # 当使用了隐士等待执行测试的时候,如果 # WebDriver没有在 # DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常 # 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 # DOM,默认的时间是0 # 一旦设置了隐式等待,则它存在整个 # WebDriver # 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢, # 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。 driver.implicitly_wait(10)

 拿到属性名为job-list下面的每一个li,这里需要注意elements是加s的,因为是获取多个所以需要加s,如果是单个就直接使用element即可。

lis = driver.find_elements_by_css_selector(".job-list li") print(lis)

这里我们爬取下图中圈起来的信息

for li in lis: # print(li) title = li.find_element_by_css_selector(".job-name").text #岗位名称 位置 = li.find_element_by_css_selector(".job-area").text 薪资 = li.find_element_by_css_selector(".red").text 经验 = li.find_element_by_css_selector(".job-limit p").text company = li.find_element_by_css_selector(".company-text .name a").text #公司名称 commpany_type = li.find_element_by_css_selector(".company-text p a").text #公司分类 print(title, 位置, 薪资, 经验, company, commpany_type)

接下来就是保存信息,我使用的是csv保存,在导入库的代码后输入如下代码

f = open("boos直聘.csv", "w", encoding="utf-8", newline="") csv.writer(f).writerow(["职位", "位置", "薪资", "经验", "公司名", "类型"])

写入csv

csv.writer(f).writerow([title, 位置, 薪资, 经验, company, commpany_type])

参考文章:Python Selenium库的使用

代码:

from selenium import webdriver from selenium.webdriver.common.keys import Keys import csv f = open("php_boos直聘.csv", "w", encoding="utf-8", newline="") csv.writer(f).writerow(["职位", "位置", "薪资", "经验", "公司名", "类型"]) # 打开谷歌驱动 driver = webdriver.Chrome() # 打开火狐驱动, 下载的是哪个驱动就用所对应的驱动名打开,这里我使用的是谷歌 # driver = webdriver.Firefox() # 输入需要搜索的网址,这里直接输入boos的首页网址,也可以根据自己的需要来输入对应的网址,修改括号中的网址即可 driver.get("https://www.zhipin.com/") # 输入搜索内容 driver.find_element_by_css_selector(".ipt-search").send_keys("php") # # # 模拟回车键 driver.find_element_by_css_selector(".ipt-search").send_keys(Keys.ENTER) # 搜索全国 driver.find_element_by_link_text("全国").click() # 回车搜索 driver.find_element_by_css_selector(".ipt-search").send_keys(Keys.ENTER) # driver.find_element_by_css_selector("#btn btn-search") # implicitly_wait(): 隐式等待 # 当使用了隐士等待执行测试的时候,如果 # WebDriver没有在 # DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常 # 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 # DOM,默认的时间是0 # 一旦设置了隐式等待,则它存在整个 # WebDriver # 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢, # 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。 driver.implicitly_wait(10) def index(): # # 获取所有的li标签 lis = driver.find_elements_by_css_selector(".job-list li") # print(lis) for li in lis: # print(li) title = li.find_element_by_css_selector(".job-name").text 位置 = li.find_element_by_css_selector(".job-area").text 薪资 = li.find_element_by_css_selector(".red").text 经验 = li.find_element_by_css_selector(".job-limit p").text company = li.find_element_by_css_selector(".company-text .name a").text commpany_type = li.find_element_by_css_selector(".company-text p a").text print(title, 位置, 薪资, 经验, company, commpany_type) csv.writer(f).writerow([title, 位置, 薪资, 经验, company, commpany_type]) for j in range(10): index() driver.find_element_by_css_selector(".next").click() driver.quit()



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有